/**
 * 自定义axios函数
 * @param {object} config axios配置对象
 * @returns promise对象
 */
function myAxios(config) {
  // 创建一个Promise对象
  return new Promise((resolve, reject) => {
    // 创建XMLHttpRequest对象
    const xhr = new XMLHttpRequest()
    // 如果存在params参数
    if (config.params) {
      // 创建URLSearchParams对象
      const paramsObj = new URLSearchParams(config.params)
      // 将paramsObj转换为字符串
      const queryString = paramsObj.toString()
      // 拼接在url中
      config.url += `?${queryString}`
    }
    // 打开一个请求，传入方法和url
    xhr.open(config.method || 'GET', config.url)

    // 加载结束时触发的事件
    xhr.addEventListener('loadend', () => {
      // 如果请求成功，则解析响应并返回
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(JSON.parse(xhr.response))
      } else {
        // 否则，抛出一个Error对象并拒绝Promise
        reject(new Error(xhr.response))
      }
    })
    // 如果存在data数据
    if (config.data) {
      // 设置请求头为application/json
      xhr.setRequestHeader('Content-Type', 'application/json')
      // 将data转换为JSON字符串
      const jsonStr = JSON.stringify(config.data)
      // 发送请求，传入JSON字符串
      xhr.send(jsonStr)
    } else {
      // 若没有data，则直接发送请求
      xhr.send()
    }
  })
}


// GET 请求测试（不携带参数）
// myAxios({
//   url: 'http://hmajax.itheima.net/api/province'
// }).then(result => {
//   console.log(result)
//   document.querySelector('p').innerHTML = result.list.join('<br>')
// }).catch(err => {
//   console.log(err)
//   document.querySelector('p').innerHTML = err.message
// })


// GET 请求测试（携带参数）
// myAxios({
//   url: 'http://hmajax.itheima.net/api/area',
//   params: {
//     pname: '辽宁省',
//     cname: '大连市'
//   }
// }).then(result => {
//   console.log(result)
// })


// POST 请求测试
// myAxios({
//   url: 'http://hmajax.itheima.net/api/register',
//   method: 'POST',
//   data: {
//     username: 'itheima9',
//     password: '789456123'
//   }
// }).then(result => {
//   console.log(result)
// })